USE [GD2C2014]
GO

--creacion esquema del grupo
if not exists(select * from sys.schemas where name = 'WE_MISS_THE_GARBAGE_COLLECTOR')
execute('CREATE SCHEMA [WE_MISS_THE_GARBAGE_COLLECTOR] AUTHORIZATION [gd]')

else print('No te creo nada')
GO

/**************************************
                                ROL
**************************************/

CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].Rol(
        ID_Rol numeric(18,0) PRIMARY KEY IDENTITY(0,1),
        Nombre nvarchar(255) UNIQUE NOT NULL,
        Activo BIT DEFAULT 1 NOT NULL
)
go

INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].Rol(Nombre)
        VALUES
        ('Administrador'),
        ('Recepcionista'),
        ('Guest')
       
/**************************************
                        FUNCIONALIDADES
**************************************/

CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].Funcionalidad(
        ID_Funcionalidad numeric(18,0) PRIMARY KEY IDENTITY(0,1),
        Descripcion nvarchar(255) UNIQUE not null
)
go

INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].Funcionalidad(Descripcion)
        VALUES
        ('ABM DE ROL'),
        ('ABM DE USUARIO'),
        ('ABM DE CLIENTES'),
        ('ABM DE HOTEL'),
        ('ABM DE HABITACION'),
        ('ABM DE REGIMEN DE ESTADIA'),
        ('GENERAR/MODIFICAR RESERVA'),
        ('CANCELAR RESERVA'),
        ('REGISTRAR ESTADIA'),
        ('REGISTRAR CONSUMIBLES'),
        ('FACTURAR PUBLICACIONES'),
        ('LISTADO ESTADISTICO')
       
/**************************************
                FUNCIONALIDAD DE CADA ROL
**************************************/

CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].RolxFuncionalidad(
        Rol numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].ROL (ID_Rol) NOT NULL,
        Funcionalidad numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Funcionalidad (ID_Funcionalidad) NOT NULL
        PRIMARY KEY(Rol,Funcionalidad)
)
go

INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].RolxFuncionalidad(Rol,Funcionalidad)
(
        SELECT R.ID_Rol,F.ID_Funcionalidad
        FROM [WE_MISS_THE_GARBAGE_COLLECTOR].Rol R,[WE_MISS_THE_GARBAGE_COLLECTOR].Funcionalidad F
        WHERE R.Nombre='Administrador'
        OR (R.Nombre='Guest' AND (F.Descripcion='GENERAR/MODIFICAR RESERVA' OR F.Descripcion='CANCELAR RESERVA'))
        OR (R.Nombre='Recepcionista' AND (F.Descripcion='ABM DE CLIENTES' OR F.Descripcion='GENERAR/MODIFICAR RESERVA' OR
        F.Descripcion='CANCELAR RESERVA' OR F.Descripcion='REGISTRAR ESTADIA' OR F.Descripcion='REGISTRAR CONSUMIBLES' OR
        F.Descripcion='FACTURAR PUBLICACIONES'))
)
go

/**************************************
                                PERSONA
**************************************/

CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].Persona(
        ID_Persona numeric(18,0) PRIMARY KEY,
        Nombre nvarchar(255) NOT NULL,
        Apellido nvarchar(255) NOT NULL,
        Tipo_documento nvarchar(255),
        Nro_documento numeric(18,0) NOT NULL,
        Telefono numeric(18,0),
        Direccion nvarchar(255) NOT NULL,
        Fecha_Nac datetime NOT NULL,
)

GO

/**************************************
                                HOTELES
**************************************/

CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].Hotel(
        ID_Hotel numeric(18,0) PRIMARY KEY IDENTITY(0,1),
        Habilitado bit default 1 NOT NULL,
        Fecha_alta datetime,
        Fecha_baja datetime,
        Nombre nvarchar(255),
        Mail nvarchar(255),
        Telefono numeric(18,0),
        Calle nvarchar(255) NOT NULL,
        Cant_estrellas numeric(1,0) NOT NULL,
        Ciudad nvarchar(255) NOT NULL,
        Pais nvarchar(255),
        Fecha_creacion datetime,
        Admin_asignado bit default 1 NOT NULL
)

GO

/**************************************
                                CLIENTE
**************************************/

CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].Cliente(
        ID_Cliente numeric(18,0) PRIMARY KEY IDENTITY(0,1),
        Mail nvarchar(255) UNIQUE NOT NULL,
        Persona numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Persona(ID_Persona) NOT NULL,
        Habilitado BIT DEFAULT 1 NOT NULL,
        Nacionalidad nvarchar(255) NOT NULL
)
GO
 
/**************************************
                                USUARIO
**************************************/

CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].Usuario(
        ID_User numeric(18,0) PRIMARY KEY IDENTITY(0,1),
        Username nvarchar(255) UNIQUE,
        Persona numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Persona(ID_Persona) NOT NULL,
        Habilitado BIT DEFAULT 1 NOT NULL,
        Intentos numeric(1,0) DEFAULT 0 NOT NULL,
        SHA256 binary(32),
        Mail nvarchar(255) NOT NULL
)

INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].Persona(ID_Persona ,Nombre,Apellido,Tipo_documento,Nro_Documento,Telefono,Direccion,Fecha_Nac)
VALUES(0,'admin','No definido','No definido',0,0,'No definido',0)

DECLARE @hash binary(32)
SET @hash =  CONVERT(binary(32),'0xe6b87050bfcb8143fcb8db0170a4dc9ed00d904ddd3e2a4ad1b1e8dc0fdc9be7',1)
INSERT INTO WE_MISS_THE_GARBAGE_COLLECTOR.Usuario(Username,Persona,SHA256,Mail)
VALUES
        ('admin',0, @hash,'No tengo mail')

go

/**************************************
                ROLES DE CADA USUARIO
**************************************/

CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].RolxUsuario(
        Rol numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Rol (ID_Rol) NOT NULL,
        Usuario numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Usuario (ID_User) NOT NULL,
        Hotel numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Hotel(ID_Hotel) NOT NULL,
        PRIMARY KEY (Rol,Usuario)
)
go

/**************************************
                        SESIONES
**************************************/

CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].UsuarioxHotel(
        Usuario numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Usuario(ID_User) NOT NULL,
        Hotel numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Hotel(ID_Hotel) NOT NULL,
        PRIMARY KEY(Usuario,Hotel)
)
go

/**************************************
                        BAJAS HOTELES
**************************************/
CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].Baja_Hotel(
        ID_Baja numeric(18,0) PRIMARY KEY IDENTITY(0,1),
        Hotel numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Hotel(ID_Hotel) NOT NULL,
        Inicio_periodo datetime NOT NULL,
        Fin_periodo datetime NOT NULL,
        Motivo nvarchar(255) NOT NULL
)
go

/**************************************
                        HABITACIONES
**************************************/

CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].Habitacion(
        Numero numeric(18,0) NOT NULL,
        Hotel numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Hotel (ID_Hotel) NOT NULL,
        Piso numeric(18,0) NOT NULL,
        Frente nvarchar(50) NOT NULL,
        Tipo_codigo numeric(18,0) NOT NULL,
        Tipo_porcentual numeric(18,2) NOT NULL,
        Descripcion nvarchar(255) NOT NULL,
        Habilitado bit default 1 NOT NULL,
        Ocupada bit default 0 NOT NULL,
        PRIMARY KEY(Numero,Hotel)
)
go

/**************************************
                                REGIMENES
**************************************/

CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].Regimen(
        Codigo numeric(18,0) PRIMARY KEY IDENTITY(0,1),
        Descripcion nvarchar(255) NOT NULL,
        Activo bit default 1 NOT NULL,
        Precio_base numeric(18,2) NOT NULL
        constraint CK_precio_base check (Precio_base>=0)
)
go

/**************************************
                REGIMEN DE CADA HOTEL
**************************************/

CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].RegimenxHotel(
        Regimen numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Regimen(Codigo) NOT NULL,
        Hotel numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Hotel(ID_Hotel) NOT NULL
        PRIMARY KEY(Regimen,Hotel)
)
go

/**************************************
          FACTURACION
**************************************/

create table [WE_MISS_THE_GARBAGE_COLLECTOR].Factura(
        ID_Factura numeric(18,0) PRIMARY KEY,
        ID_Cliente numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Cliente(ID_Cliente) NOT NULL,
        Fecha date,
        Forma_Pago nvarchar(255),
        Nro_Tarjeta numeric(20,0),
        Total numeric(18,2)
        constraint CK_Total check (Total>=0)
)
go

create table [WE_MISS_THE_GARBAGE_COLLECTOR].RenglonFactura(
        ID_Renglon numeric (18,0) identity (1,1) PRIMARY KEY,
        ID_Factura numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Factura(ID_Factura),
        Descripcion nvarchar(255) NOT NULL,
        Item_Cantidad numeric(18,0),
        Item_Monto numeric(18,2)
        constraint CK_Item_Monto check (Item_Monto>=0)
)
go

/**************************************
          RESERVAS
**************************************/


create table [WE_MISS_THE_GARBAGE_COLLECTOR].Reserva(
        ID_Reserva numeric(18,0) PRIMARY KEY,
        Usuario numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Usuario(ID_User) NOT NULL,
        Fecha date,
        Inicio_Permanencia date,
        Fin_Permanencia date,
        Hotel numeric(18,0) NOT NULL,
        Regimen numeric(18,0) NOT NULL,
        Cliente numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Cliente(ID_Cliente) NOT NULL,
        Estado bit default 1 NOT NULL
)
go

ALTER TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].Reserva
  ADD CONSTRAINT FK_Regimen_Reserva
  FOREIGN KEY(Regimen, Hotel) REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].RegimenxHotel(Regimen, Hotel)
go

create table [WE_MISS_THE_GARBAGE_COLLECTOR].ReservaCancelada(
 
        Motivo nvarchar(255) NOT NULL,
        Fecha_Cancelacion date,
        Usuario numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Usuario(ID_User) NOT NULL,
        Reserva numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Reserva(ID_Reserva) NOT NULL
)
go

/**************************************
         HABITACIONES RESERVADAS
**************************************/
CREATE TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].HabitacionxReserva(
        Habitacion numeric(18,0) NOT NULL,
        Hotel numeric(18,0) NOT NULL,
        Reserva numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Reserva(ID_Reserva)
        PRIMARY KEY(Habitacion,Hotel,Reserva)
)

ALTER TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].HabitacionxReserva
  ADD CONSTRAINT FK_HabitacionxReserva
  FOREIGN KEY(Habitacion, Hotel) REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Habitacion(Numero,Hotel)

GO
/**************************************
              ESTADIA
**************************************/

create table [WE_MISS_THE_GARBAGE_COLLECTOR].Estadia(
        ID_Estadia numeric(18,0) PRIMARY KEY,
        Fecha_Ingreso date,
        Fecha_Egreso date,
        Habitacion numeric(18,0) NOT NULL,
        Hotel numeric(18,0) NOT NULL,
        Reserva numeric(18,0) NOT NULL
)
go

ALTER TABLE [WE_MISS_THE_GARBAGE_COLLECTOR].Estadia
  ADD CONSTRAINT FK_Estadia_HabitacionxReserva
  FOREIGN KEY(Habitacion, Hotel, Reserva) REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].HabitacionxReserva(Habitacion, Hotel, Reserva)
go

/**************************************
          CONSUMIBLES
**************************************/

create table [WE_MISS_THE_GARBAGE_COLLECTOR].Consumible(
        ID_Consumible numeric(18,0) PRIMARY KEY,
        Estadia numeric(18,0) FOREIGN KEY REFERENCES [WE_MISS_THE_GARBAGE_COLLECTOR].Estadia(ID_Estadia),
        Descripcion nvarchar(255) NOT NULL,
        Precio numeric(18,2)
        constraint CK_precio check (Precio>=0)
)
go


/******************************************************************
                        STORED PROCEDURES, TRIGGERS Y FUNCTIONS
*******************************************************************/
--FUNCIONES AUXILIARES
CREATE FUNCTION [WE_MISS_THE_GARBAGE_COLLECTOR].DevolvemeTipoDeDocumento(@Nacionalidad nvarchar(255))
RETURNS nvarchar(255)
BEGIN
        DECLARE @Tipo_doc nvarchar(255)
        SET @Tipo_doc='DNI'
        IF (@Nacionalidad!='ARGENTINO')
                SET @Tipo_doc='Pasaporte'
        RETURN @Tipo_doc
END

GO

CREATE FUNCTION [WE_MISS_THE_GARBAGE_COLLECTOR].DameDireccion(@Dominio nvarchar(255),@Nro numeric(18,0))
RETURNS nvarchar(255)
BEGIN
        DECLARE @Nro_calle nvarchar(255)
        SET @Nro_calle=CAST(@Nro AS nvarchar(255))
        RETURN @Dominio+' '+@Nro_calle
END
GO

CREATE FUNCTION [WE_MISS_THE_GARBAGE_COLLECTOR].dameIDHotel(@ciudad nvarchar(255),@nombreCalle nvarchar(255),@nroCalle numeric(18,0))
RETURNS numeric(18,0)
BEGIN
        RETURN(
                SELECT ID_Hotel
                FROM [WE_MISS_THE_GARBAGE_COLLECTOR].Hotel
                WHERE @ciudad=Ciudad AND
                [WE_MISS_THE_GARBAGE_COLLECTOR].DameDireccion(@nombreCalle,@nroCalle)=Calle
        )
END
GO

CREATE FUNCTION [WE_MISS_THE_GARBAGE_COLLECTOR].dameClientID(@mail nvarchar(255))
RETURNS nvarchar(255)
BEGIN
        RETURN(SELECT ID_Cliente
                        FROM [WE_MISS_THE_GARBAGE_COLLECTOR].Cliente
                        WHERE @mail=Mail
                        )
END
GO
------------------------------------------------------------------
--             STORED PROCEDURE PARA LOGIN
------------------------------------------------------------------
-- Incrementa o resetea la cantidad de intentos fallidos
--        y deshabilita la cuenta si supero los 3.
------------------------------------------------------------------

CREATE PROCEDURE[WE_MISS_THE_GARBAGE_COLLECTOR]].[LOGIN](@Username nvarchar(255),@SHA256 binary(32))
AS
        DECLARE @U_name nvarchar(255)
        DECLARE @Id int
        DECLARE @U_SHA256  binary(32)
        DECLARE @U_habilitado bit
        DECLARE @Cant_intentos int
        --Busqueda de usuario
        SELECT @Id=ID_User,@U_name=Username,@SHA256=SHA256,@U_habilitado=Habilitado,@Cant_intentos=Intentos
        FROM [WE_MISS_THE_GARBAGE_COLLECTOR].Usuario
        WHERE Username=@Username
       
        IF @U_name IS NULL BEGIN
                raiserror('No existe ningÃºn usuario con ese username.', 11, 1)
                RETURN -1
        END
        --
        IF @U_habilitado=0 BEGIN
                raiserror('El usuario se encuentra desahabilitado',16,1)
                RETURN -2
        END
        --Caso de contraseÃ±a incorrecta
        IF @U_SHA256<>@SHA256 BEGIN
                SET @Cant_intentos=@Cant_intentos+1
                IF  @Cant_intentos=3 BEGIN      --Si el usuario llega al max de intentos
                        SET @U_habilitado=0             --queda deshabilitado
                        SET @Cant_intentos=0
                END
                UPDATE [WE_MISS_THE_GARBAGE_COLLECTOR].Usuario
                SET Intentos=@Cant_intentos,Habilitado=@U_habilitado
                WHERE Username=@Username
                raiserror('ContraseÃ±a incorrecta',16,1)
                RETURN -3
        END
       
        IF @U_SHA256=@SHA256 BEGIN
                UPDATE [WE_MISS_THE_GARBAGE_COLLECTOR].Usuario
                SET Intentos=0
                WHERE Username=@Username
                RETURN @Id
        END
       
GO

------------------------------------------------------------------
--                                      MIGRACION HOTELES
------------------------------------------------------------------

INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].Hotel(Calle,Cant_estrellas,Ciudad)
(
        SELECT DISTINCT [WE_MISS_THE_GARBAGE_COLLECTOR].DameDireccion(Hotel_Calle,Hotel_Nro_Calle),Hotel_CantEstrella,Hotel_Ciudad
        FROM [gd_esquema].[Maestra]
)

GO

------------------------------------------------------------------
--                                      MIGRACION CLIENTES
------------------------------------------------------------------
GO
--Cursor para la migracion de Clientes
DECLARE @apellido nvarchar(255)
DECLARE @depto nvarchar(50)
DECLARE @calle_nombre nvarchar(255)
DECLARE @fecha_nac datetime
DECLARE @mail nvarchar(255)
DECLARE @nacionalidad nvarchar(255)
DECLARE @nombre nvarchar(255)
DECLARE @calle_nro numeric(18,0)
DECLARE @dni numeric(18,0)
DECLARE @direccion nvarchar(255)
DECLARE @tipo_doc nvarchar(255)
DECLARE @Contador int
SET @Contador=1

DECLARE CursorClientes CURSOR FOR
        SELECT DISTINCT Cliente_Apellido,Cliente_Depto,Cliente_Dom_Calle,Cliente_Fecha_Nac,
                                Cliente_Mail,Cliente_Nacionalidad,Cliente_Nombre,Cliente_Nro_Calle,Cliente_Pasaporte_Nro
        FROM [GD2C2014].[gd_esquema].[Maestra]

OPEN CursorClientes

FETCH NEXT FROM CursorClientes
INTO @apellido,@depto,@calle_nombre,@fecha_nac,@mail,@nacionalidad,@nombre,@calle_nro,@dni

WHILE (@@FETCH_STATUS=0)
        BEGIN
                IF (NOT EXISTS (SELECT 1 FROM [WE_MISS_THE_GARBAGE_COLLECTOR].Cliente WHERE @mail=Mail))
                BEGIN
                        SET @direccion=[WE_MISS_THE_GARBAGE_COLLECTOR].DameDireccion(@calle_nombre,@calle_nro)
                        SET @tipo_doc=[WE_MISS_THE_GARBAGE_COLLECTOR].DevolvemeTipoDeDocumento(@nacionalidad)
                        INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].Persona(ID_Persona,Nombre,Apellido,Tipo_documento,Nro_documento,Direccion,Fecha_Nac)
                        VALUES
                        (@Contador,@nombre,@apellido,@tipo_doc,@dni,@direccion,@fecha_nac)
                        INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].Cliente(Mail,Nacionalidad,Persona)
                        VALUES
                        (@mail,@nacionalidad,@Contador)
                        SET @Contador=@Contador+1
                END    
                FETCH NEXT FROM CursorClientes
                INTO @apellido,@depto,@calle_nombre,@fecha_nac,@mail,@nacionalidad,@nombre,@calle_nro,@dni
        END
CLOSE CursorClientes
DEALLOCATE CursorClientes

GO

------------------------------------------------------------------
--                                      MIGRACION HABITACIONES
------------------------------------------------------------------
INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].Habitacion(Numero,Hotel,Piso,Frente,Tipo_codigo,Tipo_porcentual,Descripcion)
        SELECT DISTINCT Habitacion_Numero,
        [WE_MISS_THE_GARBAGE_COLLECTOR].dameIDHotel(Hotel_Ciudad,Hotel_Calle,Hotel_Nro_Calle),
        Habitacion_Piso,
        Habitacion_Frente,
        Habitacion_Tipo_Codigo,
        Habitacion_Tipo_Porcentual,
        Habitacion_Tipo_Descripcion
        FROM gd_esquema.Maestra
       
--HABITACIONES RESERVADAS
INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].HabitacionxReserva
        SELECT Habitacion_Numero,H.Hotel,Reserva_Codigo
        FROM gd_esquema.Maestra M
        JOIN [WE_MISS_THE_GARBAGE_COLLECTOR].Habitacion H ON M.Habitacion_Numero=H.Numero
        AND (SELECT Calle FROM [WE_MISS_THE_GARBAGE_COLLECTOR].Hotel WHERE H.Hotel=ID_Hotel)=[WE_MISS_THE_GARBAGE_COLLECTOR].DameDireccion(M.Hotel_Calle,M.Hotel_Nro_Calle)
        AND (SELECT Ciudad FROM [WE_MISS_THE_GARBAGE_COLLECTOR].Hotel WHERE H.Hotel=ID_Hotel)=M.Hotel_Ciudad
        JOIN [WE_MISS_THE_GARBAGE_COLLECTOR].Reserva R ON M.Reserva_Codigo=R.ID_Reserva
------------------------------------------------------------------
--                                      MIGRACION REGIMENES
------------------------------------------------------------------
INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].Regimen(Descripcion,Precio_base)
        SELECT DISTINCT Regimen_Descripcion,Regimen_Precio
        FROM gd_esquema.Maestra

INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].RegimenxHotel
        SELECT DISTINCT R.Codigo,[WE_MISS_THE_GARBAGE_COLLECTOR].dameIDHotel(Hotel_Ciudad,Hotel_Calle,Hotel_Nro_Calle)
        FROM gd_esquema.Maestra M
        JOIN [WE_MISS_THE_GARBAGE_COLLECTOR].Regimen R ON R.Descripcion=M.Regimen_Descripcion
        AND R.Precio_base=M.Regimen_Precio
------------------------------------------------------------------
--                                      MIGRACION CONSUMIBLES
------------------------------------------------------------------
INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].Consumible(ID_Consumible, Descripcion, Precio)
(
        SELECT DISTINCT M.Consumible_Codigo,M.Consumible_Descripcion,M.Consumible_Precio
        FROM gd_esquema.Maestra M
        WHERE (M.Factura_Nro is not null) AND (M.Consumible_Codigo is not null)
)
GO

------------------------------------------------------------------
--                                      MIGRACION FACTURAS
------------------------------------------------------------------
INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].Factura(ID_Factura, ID_Cliente, Fecha, Forma_Pago, Nro_Tarjeta, Total)

        SELECT Factura_Nro, [WE_MISS_THE_GARBAGE_COLLECTOR].dameClientID(Cliente_Mail), Factura_Fecha, 'efectivo', 0, Factura_Total
        FROM gd_esquema.Maestra
        WHERE Factura_Nro is not null
        GROUP BY Factura_Nro,Cliente_Mail, Factura_Fecha, Factura_Total
        HAVING Factura_Nro is not null
        ORDER BY Factura_Nro
       
GO

------------------------------------------------------------------------------------------
--Renglones

INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].RenglonFactura(ID_Factura, Descripcion, Item_Cantidad, Item_Monto)
        SELECT Factura_Nro, [WE_MISS_THE_GARBAGE_COLLECTOR].dameDescripcionConsumible(Cliente_Mail), Item_Factura_Cantidad, Item_Factura_Monto
        FROM gd_esquema.Maestra
        WHERE (Factura_Nro is not null) AND (Consumible_Codigo is not null)

        UNION

        SELECT Factura_Nro, [WE_MISS_THE_GARBAGE_COLLECTOR].dameDescripcionReservaYEstadia(Cliente_Mail), Item_Factura_Cantidad, Item_Factura_Monto
        FROM gd_esquema.Maestra
        WHERE (Factura_Nro is not null) AND (Reserva_Codigo is not null) AND (Estadia_Cant_Noches < Reserva_Cant_Noches)
       
        UNION
       
        SELECT Factura_Nro, 'Estadia', Item_Factura_Cantidad, Item_Factura_Monto
        FROM gd_esquema.Maestra
        WHERE (Factura_Nro is not null) AND (Reserva_Codigo is not null) AND (Estadia_Cant_Noches = Reserva_Cant_Noches)

        ORDER BY Factura_Nro